home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok72.lha
/
while-Interpreter
/
Source
/
QuadLese.MOD
< prev
next >
Wrap
Text File
|
1993-08-15
|
4KB
|
114 lines
IMPLEMENTATION MODULE QuadLese;
FROM InOut IMPORT Read, WriteLn, Write, WriteString;
PROCEDURE LeseZeichen() : CHAR;
VAR ch : CHAR;
korrekt : BOOLEAN; (* Eingabe eines korrekten Zeichens. *)
BEGIN
korrekt:=FALSE;
WHILE NOT(korrekt) DO
Read(ch);
CASE ch OF
"b" : korrekt:=TRUE;
| "B" : korrekt:=TRUE;ch:="b"; (* begin *)
| "e" : korrekt:=TRUE;
| "E" : korrekt:=TRUE;ch:="e"; (* end *)
| "w" : korrekt:=TRUE;
| "W" : korrekt:=TRUE;ch:="w"; (* while *)
| "d" : korrekt:=TRUE;
| "D" : korrekt:=TRUE;ch:="d"; (* do *)
| ":" : korrekt:=TRUE; (* := *) (* Zuweisung *)
| "#" : korrekt:=TRUE; (* # *)
| "s" : korrekt:=TRUE;
| "S" : korrekt:=TRUE;ch:="s"; (* succ *)
| "p" : korrekt:=TRUE;
| "P" : korrekt:=TRUE;ch:="p"; (* pred *)
| ";" : korrekt:=TRUE; (* ; *)
| "(" : korrekt:=TRUE; (* ( *)
| ")" : korrekt:=TRUE; (* ) *)
| "x" : korrekt:=TRUE;ch:="X";
| "X" : korrekt:=TRUE; (* X *) (* Variable *)
| "u" : korrekt:=TRUE;ch:="U"; (* Unterprogramm *)
| "U" : korrekt:=TRUE;
ELSE
IF (ch >= "0") AND (ch <= "9") THEN (* Zahlen *)
korrekt:=TRUE;
ELSE
(* Fehlerhafte Eingabe eines Zeichens. *)
END;
END; (* OF CASE *)
END;
Write(ch);
RETURN ch;
END LeseZeichen;
PROCEDURE Lese(VAR Liste : arrList);
VAR i, (* Schleifenzaehler *)
begin : CARDINAL; (* Zaehler fuer noch offene 'begin' Anweisungen *)
ch : CHAR;
BEGIN
WriteString("Eingabe des while-Programms.");WriteLn;
WriteString("Geben Sie bitte folgende Zeichen fuer die jeweiligen");
WriteString(" Befehle ein.");WriteLn;WriteLn;
WriteString(" 'b' <-> begin 'e' <-> end");WriteLn;
WriteString(" 'w' <-> while 'd' <-> do");WriteLn;
WriteString(" ':' <-> := '#' <-> #");WriteLn;
WriteString(" 's' <-> succ 'p' <-> pred");WriteLn;
WriteLn;
WriteString("Ausserdem sind noch folgende Zeichen erlaubt :");WriteLn;
WriteString(" ';' '(' ')' '0' '1' '2' '3'");WriteLn;
WriteString(" '4' '5' '6' '7' '8' '9' 'X'");WriteLn;
WriteLn;
WriteString("Ausserdem steht 'U#' fuer einige Unterprogramme.");WriteLn;
WriteString("Das Ergebnis steht in X1. X0 - X9 sind Eingabevariablen.");
WriteLn;
WriteString(" U1 <--> Addition X1 := X1 + X2.");WriteLn;
WriteString(" U2 <--> Subtraktion X1 := X1 - X2.");WriteLn;
WriteString(" U3 <--> Multiplikation X1 := X1 * X2.");WriteLn;
WriteString(" U4 <--> Division X1 := X1 DIV X2.");WriteLn;
WriteString(" U5 <--> Modular X1 := X1 MOD X2.");WriteLn;
WriteLn;
WriteString("Beispiele fuer korrekte while-Programme :");WriteLn;
WriteString(" bwX1#x2dwX1#X4dX1:s(X1);X2:X4e");WriteLn;
WriteString(" ergibt : begin");WriteLn;
WriteString(" while X1 # X2 do");WriteLn;
WriteString(" while X1 # X4 do");WriteLn;
WriteString(" X1:=succ(X1);");WriteLn;
WriteString(" X2:=X4");WriteLn;
WriteString(" end");WriteLn;
WriteLn;
WriteLn;
WriteString("Geben Sie jetzt Ihr Programm gemaess obiger Definition ein : ");
WriteLn;
ch:=LeseZeichen();
IF ch # 'b' THEN
WriteString("Dies kann kein korrektes while-Programm sein!!!");WriteLn;
WriteLn;
HALT;
ELSE
Liste[1]:='b';
i:=2;
begin:=1;
WHILE begin # 0 DO
ch:=LeseZeichen();
IF ch = 'b' THEN INC(begin) END;
IF ch = 'e' THEN DEC(begin) END;
Liste[i]:=ch;
INC(i);
IF i > MaxBefehle THEN
WriteString("Out of Memory!!! Erhoehe MaxBefehle.");WriteLn;
WriteLn;
HALT;
END;
END;
END;
END Lese;
END QuadLese.